home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Metrowerks CodeWarrior / Java Support / Java_Source / IFC_112 / netscape / application / AppletResources.java < prev    next >
Encoding:
Text File  |  1999-05-28  |  7.4 KB  |  248 lines  |  [TEXT/CWIE]

  1. // AppletResources.java
  2. // By Ned Etcode
  3. // Copyright 1995, 1996, 1997 Netscape Communications Corp.  All rights reserved.
  4.  
  5. package netscape.application;
  6.  
  7. import netscape.util.*;
  8.  
  9. import java.net.URL;
  10. import java.io.InputStream;
  11.  
  12.  
  13. /** An AppletResources instance locates and manages an Application's
  14.   * resources (images, sounds, and so on). You never access an AppletResources
  15.   * instance directly.  This class will be replaced by a more
  16.   * general resource manager.
  17.   */
  18.  
  19. class AppletResources {
  20.     Application         _applet;
  21.     URL                 _baseURL;
  22.     String              _subdirectory = "";
  23.  
  24.     static final String         CONTENTS = ".contents",
  25.                                 LANGUAGES = "Languages",
  26.                                 INTERFACES_DIRECTORY = "interfaces",
  27.                                 IMAGE_DIRECTORY = "images",
  28.                                 FONT_DIRECTORY = "fonts",
  29.                                 SOUND_DIRECTORY = "sounds";
  30.  
  31.  
  32. /* constructors */
  33.  
  34.     public AppletResources(Application applet, java.net.URL baseURL) {
  35.         _applet = applet;
  36.         _baseURL = baseURL;
  37.     }
  38.  
  39. /* actions */
  40.  
  41.  
  42.     public void setBaseURL(java.net.URL baseURL) {
  43.         _baseURL = baseURL;
  44.         // _contents = null;
  45.     }
  46.  
  47.     public URL baseURL() {
  48.         return _baseURL;
  49.     }
  50.  
  51.     public void setSubdirectory(String subdirectoryName) {
  52.         _subdirectory = subdirectoryName;
  53.         if (_subdirectory == null) {
  54.             _subdirectory = "";
  55.         }
  56.     }
  57.  
  58.     public String subdirectory() {
  59.         return _subdirectory;
  60.     }
  61.  
  62.     public Vector availableLanguages() {
  63.         return null;
  64.     }
  65.  
  66.     private java.net.URL _urlFromBaseAndPath(URL baseURL, String path) {
  67.         URL     documentURL;
  68.  
  69.         try {
  70.             documentURL = new URL(baseURL, path);
  71.         } catch (Exception e) {
  72.             System.err.println("appletResources._urlFromBaseAndPath() - " +
  73.                                e);
  74.             documentURL = null;
  75.         }
  76.  
  77.         return documentURL;
  78.     }
  79.  
  80.     public Vector URLsForResource(String resourceName) {
  81.         Vector       urlVector, availableLanguages, languagePreferences;
  82.         String       subDir;
  83.         int          i, count;
  84.  
  85.         urlVector = new Vector();
  86.         subDir = _subdirectory;
  87.         if (subDir.length() > 0 && subDir.charAt(subDir.length() - 1) != '/') {
  88.             subDir = subDir + "/";
  89.         }
  90.  
  91.         languagePreferences = _applet.languagePreferences();
  92.         availableLanguages = availableLanguages();
  93.  
  94.       /* if no language vector provided, have to stat each one */
  95.         if (availableLanguages == null) {
  96.             count = languagePreferences.count();
  97.             for (i = 0; i < count; i++) {
  98.                 urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  99.                                (String)languagePreferences.elementAt(i) +
  100.                                      ".pkg/" + subDir + resourceName));
  101.             }
  102.             urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  103.                                                     subDir + resourceName));
  104.  
  105.             return urlVector;
  106.         }
  107.  
  108.       /* if language Vector is empty, everything's at the top level */
  109.         if (availableLanguages.isEmpty()) {
  110.             urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  111.                                                     subDir + resourceName));
  112.  
  113.             return urlVector;
  114.         }
  115.  
  116.       /* no preferred order, so take the default */
  117.         if (languagePreferences.isEmpty()) {
  118.             count = availableLanguages.count();
  119.             for (i = 0; i < count; i++) {
  120.                 urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  121.                             (String)availableLanguages.elementAt(i) + ".pkg/" +
  122.                                      subDir + resourceName));
  123.             }
  124.             urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  125.                                                     subDir + resourceName));
  126.  
  127.             return urlVector;
  128.         }
  129.  
  130.       /* try the ones we want first */
  131.         count = languagePreferences.count();
  132.         for (i = 0; i < count; i++) {
  133.             if (availableLanguages.contains(
  134.                                         languagePreferences.elementAt(i))) {
  135.                 urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  136.                                (String)languagePreferences.elementAt(i) +
  137.                                      ".pkg/" + subDir + resourceName));
  138.             }
  139.         }
  140.  
  141.       /* then the rest */
  142.         count = availableLanguages.count();
  143.         for (i = 0; i < count; i++) {
  144.             if (!languagePreferences.contains(
  145.                                         availableLanguages.elementAt(i))) {
  146.                 urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  147.                                      (String)availableLanguages.elementAt(i) +
  148.                                      ".pkg/" + subDir + resourceName));
  149.             }
  150.         }
  151.  
  152.       /* then the default */
  153.         urlVector.addElement(_urlFromBaseAndPath(_baseURL,
  154.                                                 subDir + resourceName));
  155.  
  156.         return urlVector;
  157.     }
  158.  
  159.  
  160. /* possible URLs for a given resource name */
  161.  
  162.     public Vector URLsForInterface(String interfaceName) {
  163.         return URLsForResource(INTERFACES_DIRECTORY + "/" + interfaceName);
  164.     }
  165.  
  166.     public Vector URLsForImage(String imageName) {
  167.         return URLsForResource(IMAGE_DIRECTORY + "/" + imageName);
  168.     }
  169.  
  170.     public Vector URLsForFont(String fontName) {
  171.         return URLsForResource(FONT_DIRECTORY + "/" + fontName);
  172.     }
  173.  
  174.     public Vector URLsForSound(String soundName) {
  175.         return URLsForResource(SOUND_DIRECTORY + "/" + soundName);
  176.     }
  177.  
  178.     public Vector URLsForResourceOfType(String resourceName, String type) {
  179.         return URLsForResource(type + "/" + resourceName);
  180.     }
  181.  
  182.  
  183.  
  184.   /* convenience methods */
  185.  
  186.     public InputStream streamForURLs(Vector urlVector) {
  187.   /* awt */
  188.         URL             documentURL;
  189.         InputStream     inputStream;
  190.         int             count, i;
  191.  
  192.         if (urlVector == null || urlVector.isEmpty()) {
  193.             return null;
  194.         }
  195.  
  196.         count = urlVector.count();
  197.         for (i = 0; i < count; i++) {
  198.             try {
  199.                 documentURL = (URL)urlVector.elementAt(i);
  200.                 inputStream = documentURL.openStream();
  201.                 return inputStream;
  202.             } catch (Exception e) {
  203.             }
  204.         }
  205.  
  206.         return null;
  207.     }
  208.  
  209.     public InputStream streamForInterface(String interfaceName) {
  210.         return streamForURLs(URLsForInterface(interfaceName));
  211.     }
  212.  
  213.     URL urlForBitmapNamed(String bitmapName) {
  214.         Vector urlVector;
  215.  
  216.         urlVector = URLsForImage(bitmapName);
  217.         if (urlVector.count() > 0)
  218.             return (URL)urlVector.elementAt(0);
  219.  
  220.         return null;
  221.     }
  222.  
  223.     URL urlForSoundNamed(String soundName) {
  224.         Vector urlVector;
  225.  
  226.         urlVector = URLsForSound(soundName);
  227.         if (urlVector.count() > 0)
  228.             return (URL)urlVector.elementAt(0);
  229.  
  230.         return null;
  231.     }
  232.  
  233.     URL urlForFontNamed(String fontName) {
  234.         Vector urlVector;
  235.  
  236.         urlVector = URLsForFont(fontName);
  237.         if (urlVector.count() > 0)
  238.             return (URL)urlVector.elementAt(0);
  239.  
  240.         return null;
  241.     }
  242.  
  243.     public InputStream streamForResourceOfType(String resourceName,
  244.                                                String type) {
  245.         return streamForURLs(URLsForResourceOfType(resourceName, type));
  246.     }
  247. }
  248.